#include "gtkborderimageprivate.h"
-static GtkBorderImageRepeat *
-_gtk_border_image_repeat_copy (const GtkBorderImageRepeat *repeat)
-{
- GtkBorderImageRepeat *retval;
-
- retval = g_slice_new0 (GtkBorderImageRepeat);
- *retval = *repeat;
-
- return retval;
-}
-
-static void
-_gtk_border_image_repeat_free (GtkBorderImageRepeat *repeat)
-{
- g_slice_free (GtkBorderImageRepeat, repeat);
-}
-
-G_DEFINE_BOXED_TYPE (GtkBorderImageRepeat, _gtk_border_image_repeat,
- _gtk_border_image_repeat_copy, _gtk_border_image_repeat_free)
-
G_DEFINE_BOXED_TYPE (GtkBorderImage, _gtk_border_image,
_gtk_border_image_ref, _gtk_border_image_unref)
GtkGradient *source_gradient;
GtkBorder slice;
- GtkBorderImageRepeat repeat;
+ GtkCssBorderImageRepeat repeat;
gint ref_count;
gboolean resolved;
GtkBorderImage *
_gtk_border_image_new (cairo_pattern_t *pattern,
GtkBorder *slice,
- GtkBorderImageRepeat *repeat)
+ GtkCssBorderImageRepeat *repeat)
{
GtkBorderImage *image;
GtkBorderImage *
_gtk_border_image_new_for_gradient (GtkGradient *gradient,
GtkBorder *slice,
- GtkBorderImageRepeat *repeat)
+ GtkCssBorderImageRepeat *repeat)
{
GtkBorderImage *image;
g_value_set_boxed (¶meter[1].value, &image->slice);
parameter[2].name = "border-image-repeat";
- g_value_init (¶meter[2].value, GTK_TYPE_BORDER_IMAGE_REPEAT);
+ g_value_init (¶meter[2].value, GTK_TYPE_CSS_BORDER_IMAGE_REPEAT);
g_value_set_boxed (¶meter[2].value, &image->repeat);
*n_params = 3;
GtkBorderImage *image;
cairo_pattern_t *source;
GtkBorder *slice;
- GtkBorderImageRepeat *repeat;
+ GtkCssBorderImageRepeat *repeat;
gtk_style_properties_get (props, state,
"border-image-source", &source,
gtk_border_free (slice);
if (repeat != NULL)
- _gtk_border_image_repeat_free (repeat);
+ g_free (repeat);
}
static void
gdouble surface_height,
guint side,
GtkBorder *border_area,
- GtkBorderImageRepeat *repeat)
+ GtkCssBorderImageRepeat *repeat)
{
gdouble target_x, target_y;
gdouble target_width, target_height;
target_x = border_area->left;
target_y = (side == SIDE_TOP) ? 0 : (total_height - border_area->bottom);
- if (repeat->vrepeat == GTK_REPEAT_STYLE_NONE)
+ if (repeat->vrepeat == GTK_CSS_REPEAT_STYLE_NONE)
{
target_width = image_area.width;
}
- else if (repeat->vrepeat == GTK_REPEAT_STYLE_REPEAT)
+ else if (repeat->vrepeat == GTK_CSS_REPEAT_STYLE_REPEAT)
{
repeat_pattern = TRUE;
target_x = border_area->left + (total_width - border_area->left - border_area->right) / 2;
target_y = ((side == SIDE_TOP) ? 0 : (total_height - border_area->bottom)) / 2;
}
- else if (repeat->vrepeat == GTK_REPEAT_STYLE_ROUND)
+ else if (repeat->vrepeat == GTK_CSS_REPEAT_STYLE_ROUND)
{
gint n_repeats;
n_repeats = (gint) floor (image_area.width / surface_width);
target_width = image_area.width / n_repeats;
}
- else if (repeat->vrepeat == GTK_REPEAT_STYLE_SPACE)
+ else if (repeat->vrepeat == GTK_CSS_REPEAT_STYLE_SPACE)
{
cairo_surface_t *spaced_surface;
target_x = (side == SIDE_LEFT) ? 0 : (total_width - border_area->right);
target_y = border_area->top;
- if (repeat->hrepeat == GTK_REPEAT_STYLE_NONE)
+ if (repeat->hrepeat == GTK_CSS_REPEAT_STYLE_NONE)
{
target_height = total_height - border_area->top - border_area->bottom;
}
- else if (repeat->hrepeat == GTK_REPEAT_STYLE_REPEAT)
+ else if (repeat->hrepeat == GTK_CSS_REPEAT_STYLE_REPEAT)
{
repeat_pattern = TRUE;
target_x = (side == SIDE_LEFT) ? 0 : (total_width - border_area->right) / 2;
target_y = border_area->top + (total_height - border_area->top - border_area->bottom) / 2;
}
- else if (repeat->hrepeat == GTK_REPEAT_STYLE_ROUND)
+ else if (repeat->hrepeat == GTK_CSS_REPEAT_STYLE_ROUND)
{
gint n_repeats;
n_repeats = (gint) floor (image_area.height / surface_height);
target_height = image_area.height / n_repeats;
}
- else if (repeat->hrepeat == GTK_REPEAT_STYLE_SPACE)
+ else if (repeat->hrepeat == GTK_CSS_REPEAT_STYLE_SPACE)
{
cairo_surface_t *spaced_surface;
#ifndef __GTK_BORDER_IMAGE_H__
#define __GTK_BORDER_IMAGE_H__
-#include <gtk/gtkborder.h>
-#include <gtk/gtkenums.h>
-#include <gtk/gtkgradient.h>
-#include <gtk/gtkstyleproperties.h>
-#include <gtk/gtkthemingengine.h>
+#include "gtkborder.h"
+#include "gtkgradient.h"
+#include "gtkstyleproperties.h"
+#include "gtkthemingengine.h"
+#include "gtkcsstypesprivate.h"
G_BEGIN_DECLS
-#define GTK_TYPE_BORDER_IMAGE_REPEAT (_gtk_border_image_repeat_get_type ())
-
-GType _gtk_border_image_repeat_get_type (void) G_GNUC_CONST;
-
-typedef struct {
- GtkRepeatStyle vrepeat;
- GtkRepeatStyle hrepeat;
-} GtkBorderImageRepeat;
-
typedef struct _GtkBorderImage GtkBorderImage;
#define GTK_TYPE_BORDER_IMAGE (_gtk_border_image_get_type ())
GtkBorderImage * _gtk_border_image_new (cairo_pattern_t *source,
GtkBorder *slice,
- GtkBorderImageRepeat *repeat);
+ GtkCssBorderImageRepeat *repeat);
GtkBorderImage * _gtk_border_image_new_for_gradient (GtkGradient *gradient,
GtkBorder *slice,
- GtkBorderImageRepeat *repeat);
+ GtkCssBorderImageRepeat *repeat);
GtkBorderImage * _gtk_border_image_resolve (GtkBorderImage *image,
GtkStyleProperties *props);
DEFINE_BOXED_TYPE_WITH_COPY_FUNC (GtkCssBorderCornerRadius, _gtk_css_border_corner_radius)
DEFINE_BOXED_TYPE_WITH_COPY_FUNC (GtkCssBorderRadius, _gtk_css_border_radius)
+DEFINE_BOXED_TYPE_WITH_COPY_FUNC (GtkCssBorderImageRepeat, _gtk_css_border_image_repeat)
G_BEGIN_DECLS
+typedef enum {
+ GTK_CSS_REPEAT_STYLE_NONE,
+ GTK_CSS_REPEAT_STYLE_REPEAT,
+ GTK_CSS_REPEAT_STYLE_ROUND,
+ GTK_CSS_REPEAT_STYLE_SPACE
+} GtkCssRepeatStyle;
+
typedef struct _GtkCssBorderCornerRadius GtkCssBorderCornerRadius;
typedef struct _GtkCssBorderRadius GtkCssBorderRadius;
+typedef struct _GtkCssBorderImageRepeat GtkCssBorderImageRepeat;
struct _GtkCssBorderCornerRadius {
double horizontal;
GtkCssBorderCornerRadius bottom_left;
};
+struct _GtkCssBorderImageRepeat {
+ GtkCssRepeatStyle vrepeat;
+ GtkCssRepeatStyle hrepeat;
+};
+
#define GTK_TYPE_CSS_BORDER_CORNER_RADIUS _gtk_css_border_corner_radius_get_type ()
#define GTK_TYPE_CSS_BORDER_RADIUS _gtk_css_border_radius_get_type ()
+#define GTK_TYPE_CSS_BORDER_IMAGE_REPEAT _gtk_css_border_image_repeat_get_type ()
GType _gtk_css_border_corner_radius_get_type (void);
GType _gtk_css_border_radius_get_type (void);
+GType _gtk_css_border_image_repeat_get_type (void);
G_END_DECLS
GTK_BORDER_STYLE_OUTSET
} GtkBorderStyle;
-typedef enum {
- GTK_REPEAT_STYLE_NONE,
- GTK_REPEAT_STYLE_REPEAT,
- GTK_REPEAT_STYLE_ROUND,
- GTK_REPEAT_STYLE_SPACE
-} GtkRepeatStyle;
-
G_END_DECLS
GFile *file,
GValue *value)
{
- GtkBorderImageRepeat image_repeat;
- GtkRepeatStyle styles[2];
+ GtkCssBorderImageRepeat image_repeat;
+ GtkCssRepeatStyle styles[2];
gint i;
for (i = 0; i < 2; i++)
{
if (_gtk_css_parser_try (parser, "stretch", TRUE))
- styles[i] = GTK_REPEAT_STYLE_NONE;
+ styles[i] = GTK_CSS_REPEAT_STYLE_NONE;
else if (_gtk_css_parser_try (parser, "repeat", TRUE))
- styles[i] = GTK_REPEAT_STYLE_REPEAT;
+ styles[i] = GTK_CSS_REPEAT_STYLE_REPEAT;
else if (_gtk_css_parser_try (parser, "round", TRUE))
- styles[i] = GTK_REPEAT_STYLE_ROUND;
+ styles[i] = GTK_CSS_REPEAT_STYLE_ROUND;
else if (_gtk_css_parser_try (parser, "space", TRUE))
- styles[i] = GTK_REPEAT_STYLE_SPACE;
+ styles[i] = GTK_CSS_REPEAT_STYLE_SPACE;
else if (i == 0)
{
- styles[1] = styles[0] = GTK_REPEAT_STYLE_NONE;
+ styles[1] = styles[0] = GTK_CSS_REPEAT_STYLE_NONE;
break;
}
else
}
static const gchar *
-border_image_repeat_style_to_string (GtkRepeatStyle repeat)
+border_image_repeat_style_to_string (GtkCssRepeatStyle repeat)
{
switch (repeat)
{
- case GTK_REPEAT_STYLE_NONE:
+ case GTK_CSS_REPEAT_STYLE_NONE:
return "stretch";
- case GTK_REPEAT_STYLE_REPEAT:
+ case GTK_CSS_REPEAT_STYLE_REPEAT:
return "repeat";
- case GTK_REPEAT_STYLE_ROUND:
+ case GTK_CSS_REPEAT_STYLE_ROUND:
return "round";
- case GTK_REPEAT_STYLE_SPACE:
+ case GTK_CSS_REPEAT_STYLE_SPACE:
return "space";
default:
return NULL;
border_image_repeat_value_print (const GValue *value,
GString *string)
{
- GtkBorderImageRepeat *image_repeat;
+ GtkCssBorderImageRepeat *image_repeat;
image_repeat = g_value_get_boxed (value);
cairo_pattern_t *pattern = NULL;
GtkGradient *gradient = NULL;
GtkBorder border, *parsed_border;
- GtkBorderImageRepeat repeat, *parsed_repeat;
+ GtkCssBorderImageRepeat repeat, *parsed_repeat;
gboolean retval = FALSE;
GtkBorderImage *image = NULL;
border = *parsed_border;
g_value_unset (&temp);
- g_value_init (&temp, GTK_TYPE_BORDER_IMAGE_REPEAT);
+ g_value_init (&temp, GTK_TYPE_CSS_BORDER_IMAGE_REPEAT);
if (!border_image_repeat_value_parse (parser, base, &temp))
goto out;
register_conversion_function (GTK_TYPE_BORDER_IMAGE,
border_image_value_parse,
NULL);
- register_conversion_function (GTK_TYPE_BORDER_IMAGE_REPEAT,
+ register_conversion_function (GTK_TYPE_CSS_BORDER_IMAGE_REPEAT,
border_image_repeat_value_parse,
border_image_repeat_value_print);
register_conversion_function (GTK_TYPE_SHADOW,
g_param_spec_boxed ("border-image-repeat",
"Border image repeat",
"Border image repeat",
- GTK_TYPE_BORDER_IMAGE_REPEAT, 0));
+ GTK_TYPE_CSS_BORDER_IMAGE_REPEAT, 0));
gtk_style_properties_register_property (NULL,
g_param_spec_boxed ("border-image-slice",
"Border image slice",